<template>
  <div class="air_search_form">
    <div class="air_search_form_title">
      <div
        :class="['air_search_form_title_item',activeIndex===index&&'active']"
        v-for="(item,index) in titles "
        :key="index"
        @click="activeIndex=index"
      > <i :class="item.icon" /> {{item.name}}</div>
    </div>
    <div class="air_search_form_content">
      <span
        class="exchange"
        @click="exchange"
      >换</span>
      <el-form label-width="80px">
        <el-form-item label="出发城市">
          <el-autocomplete
            v-model="form.departCity"
            :trigger-on-focus="false"
            :fetch-suggestions="querySearchAsync"
            placeholder="请输入出发城市"
            @select="handleSelect1"
          ></el-autocomplete>
        </el-form-item>
        <el-form-item label="到达城市">
          <el-autocomplete
            v-model="form.destCity"
            :trigger-on-focus="false"
            :fetch-suggestions="querySearchAsync"
            placeholder="请输入到达城市"
            @select="handleSelect2"
          ></el-autocomplete>
        </el-form-item>
        <el-form-item label="出发时间">
          <el-date-picker
            v-model="form.departDate"
            type="date"
            placeholder="选择日期"
            class="date-picker"
            :picker-options="pickerOptions"
            value-format="yyyy-MM-dd"
          >
          </el-date-picker>
        </el-form-item>
        <el-form-item label="">
          <el-button
            @click="submitSearch"
            class="search_btn"
            type="primary"
            icon="el-icon-search"
          >搜索</el-button>
        </el-form-item>
      </el-form>
    </div>
  </div>
</template>

<script>
export default {
  data: () => ({
    titles: [
      {
        name: "单程",
        icon: "iconfont icondancheng",
      },
      {
        name: "往返",
        icon: "iconfont iconshuangxiang",
      },
    ],
    activeIndex: 0,
    form: {
      // 出发城市
      departCity: "",

      // 出发城市代码
      departCode: "",

      // 目标城市
      destCity: "",

      // 目标城市代码
      destCode: "",

      // 日期 2019-05-01
      departDate: "",
    },
    // 日期设置对象
    pickerOptions: {
      // 是否禁用 日历组件上的日期
      // 返回true 就是禁用!!!
      disabledDate(date) {
        // 根据这个date 来决定哪个日期被禁用哪个日期被启用
        // 要禁用哪些日期  只要禁用 今天之前的日期即可  今天(要保留 启用)
        // js 日期的比较 => 转变为 数字的比较 时间戳
        // 1 个日期 指  date (等同于日期组件上的每一个日子)
        // 2 Date.now() 当前要购买机票的时间
        // 日历组件的上的时间戳
        const time = +date;
        const oneTime = 24 * 60 * 60 * 1000;

        // 什么时候可以启用日期
        // 日历上的日子要大于和等于当前的日子 可以启用
        // 日历上的23号 详细时间 0时 还是 24时
        // 日历上的23号 0:00:00  和 现在23号的09:00:00
        // 日历上的23号 24:00:00  和 现在23号的09:00:00
        // console.log(date);

        return !(time + oneTime > Date.now());
      },
    },
  }),
  methods: {
    // 开始搜索远程服务器的数据
    async querySearchAsync(queryString, cb) {
      // queryString 输入框的值
      // cb callback 回调函数
      const res = await this.$axios.get("/airs/city", {
        params: { name: queryString },
      });
      cb(res.data.map((v) => ({ ...v, value: v.name.replace("市", "") })));
    },
    // 点击了  出发 输入框中的城市的值
    handleSelect1(item) {
      this.form.departCode = item.sort;
    },
    // 点击了  目标 输入框中的城市的值
    handleSelect2(item) {
      this.form.destCode = item.sort;
    },
    // 点击 换  按钮
    exchange() {
      [
        this.form.departCity,
        this.form.departCode,
        this.form.destCity,
        this.form.destCode,
      ] = [
        this.form.destCity,
        this.form.destCode,
        this.form.departCity,
        this.form.departCode,
      ];
    },
    // 点击搜索按钮
    submitSearch() {
      // 1 校验表单的合法性 forEach 如何打断forEach
      // for 循环可以打断吗??  可以  break
      // forEach 是不能break!!!!

      // 全部都返回true 它返回值才是true
      // 但凡有一个返回false 它直接返回false 不再往下继续执行了
      const isValid = Object.values(this.form).every((value) => {
        if (!value) {
          this.$message.error("请检查你的输入");
        }
        return value;
      });
      if (!isValid) return;


      // 1.5 将即将要查询的数据存入到 vuex中
      this.$store.commit("air/pushHistory",this.form);


      // 2 构造参数 进行页面的跳转
      this.$router.push({ path: "/air/flights", query: this.form });
    },
  },
};
</script>

<style lang="less"  scoped  >
.air_search_form {
  border: 1px solid #ccc;
  height: 100%;
}
.air_search_form_title {
  height: 45px;
  display: flex;
  .air_search_form_title_item {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: #eeeeee;
    .iconfont {
      margin-right: 3px;
    }
  }
  .active {
    background-color: #fff;
    position: relative;
    &::before {
      content: "";
      width: 100%;
      height: 3px;
      background-color: orange;
      position: absolute;
      top: 0;
      left: 0;
    }
  }
}
.air_search_form_content {
  padding: 10px 50px 10px 30px;
  position: relative;
  .exchange {
    position: absolute;
    width: 20px;
    height: 20px;
    background-color: #999999;
    color: #fff;
    display: flex;
    justify-content: center;
    align-self: start;
    top: 51px;
    right: 16px;
    font-size: 13px;
    cursor: pointer;
    &::before {
      content: "";
      width: 24px;
      height: 56px;
      border: 1px solid #ccc;
      border-left: none;
      position: absolute;
      top: -20px;
      left: -15px;
      z-index: -1;
    }
  }
}
.date-picker {
  width: 100%;
}
.search_btn {
  width: 100%;
}
</style>